// 对 axios 进行封装处理
import axios from "axios";
import {message} from "antd"
// 1. 在 axios 的基础之上创建了一个新的 axios 实例：instance
const instance = axios.create({
  baseURL: "http://localhost:4000",
  timeout: 5000,
});

// 2. 配置 axios 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 拦截成功
    // 2.1 获取 token
    const token = localStorage.token;
    // 2.2 将 token 添加到请求头的 Authorization 属性中
    config.headers.token = token;
    return config;
  },
  (err) => {
    // 拦截失败
    return err;
  }
);

// 3. 配置 axios 响应拦截器
instance.interceptors.response.use(
  (res) => {
    // 响应成功
    return res; // { data: {} }
  },
  (err) => {
    // 响应失败
    // 判断错误类型，并将错误的描述添加到 err.message 属性上
    if (err && err.response) {
      switch (err.response.status) {
        case 400:
          err.message = "请求错误(400)";
          message.error("网络有问题");
          break;
        case 401:
          err.message = "身份认证过期";
          message.error("身份过期");
          localStorage.removeItem('token');
          localStorage.removeItem('userInfo')
          window.location.href = '/login'
          break;
        case 403:
          err.message = "拒绝访问(403)";
          break;
        case 404:
          err.message = "请求出错(404)";
          window.location.href="../assets/index.html"
          break;
        case 408:
          err.message = "请求超时(408)";
          break;
        case 500:
          err.message = "服务器错误(500)";
          break;
        case 501:
          err.message = "服务未实现(501)";
          break;
        case 502:
          err.message = "网络错误(502)";
          break;
        case 503:
          err.message = "服务不可用(503)";
          break;
        case 504:
          err.message = "网络超时(504)";
          break;
        case 505:
          err.message = "HTTP版本不受支持(505)";
          break;
        default:
          err.message = `连接出错(${err.response.status})!`;
      }
      return {
        data: {
          status: 0,
          type: err.response.status,
          message: err.message,
        },
      };
    } else {
      err.message = "服务器连接失败！";
      return {
        data: {
          status: 0,
          message: err.message,
        },
      };
    }
  }
);

// 将创建和配置完成的新的 axios 实例暴露出去
export default instance;